const Router = require('@koa/router');
const axios = require('axios');
const excelQueue = require('./queues/excelQueue');

const router = new Router({ prefix: '/type0' });

router.all('/save-excel', async (ctx) => {
  try {
    // 根据请求方法从不同位置获取id参数
    const id = ctx.method === 'GET' ? ctx.query.id : ctx.request.body.id;
    
    if (!id) {
      throw new Error('缺少必要参数: id');
    }
    console.log(`[${new Date().toLocaleString()}] 请求参数: id=${id}`);

    // 从API获取数据
    const response = await axios.post('https://www.insist.life:9999/dlj_inspect/detailInspect', {
      id: id
    });

    if (response.data.code !== 1) {
      console.error(`[${new Date().toLocaleString()}] API返回错误:`, response.data);
      throw new Error('获取巡检记录失败: ' + response.data.message);
    }

    const inspectData = response.data.data || {};
    if (inspectData.stationBigType === 0) {
      console.log(`[${new Date().toLocaleString()}] 巡检站点: ${inspectData.stationName}, 提交人: ${inspectData.submitPersonName}`);
      // 将任务添加到队列
      await excelQueue.add({
        id,
        inspectData
      }, {
        attempts: 2,  // 失败后重试次数
        backoff: {
          type: 'exponential',
          delay: 5000  // 初始延迟5秒
        },
        removeOnComplete: 100,  // 保留最近100个完成的任务
        removeOnFail: 100       // 保留最近100个失败的任务
      });
    }else{
      console.log(`[${new Date().toLocaleString()}] stationBigType不等于0❌`, inspectData)
    }
    // 立即返回响应，不等待Excel生成
    ctx.body = {
      success: true,
      message: '任务已加入队列',
      status: 'processing'
    };
  } catch (err) {
    console.error(`[${new Date().toLocaleString()}] 处理请求失败:`, err);
    ctx.status = 500;
    ctx.body = { success: false, message: err.message };
  }
});

// 添加一个管理接口用于查看队列状态（可选）
router.get('/queue-status', async (ctx) => {
  try {
    const counts = await Promise.all([
      excelQueue.getJobCounts(),
      excelQueue.getCompletedCount(),
      excelQueue.getFailedCount()
    ]);

    ctx.body = {
      success: true,
      counts: counts[0],
      completed: counts[1],
      failed: counts[2]
    };
  } catch (err) {
    ctx.status = 500;
    ctx.body = { success: false, message: err.message };
  }
});

// 添加一个接口用于清空失败队列
router.get('/clear-failed-jobs', async (ctx) => {
  try {
    // 获取清空前的失败任务数量
    const failedCountBefore = await excelQueue.getFailedCount();

    // 清空所有失败的任务
    await excelQueue.clean(0, 'failed');

    // 获取清空后的失败任务数量
    const failedCountAfter = await excelQueue.getFailedCount();

    ctx.body = {
      success: true,
      message: '失败队列已清空',
      clearedJobs: failedCountBefore - failedCountAfter,
      failedCountBefore,
      failedCountAfter
    };
  } catch (err) {
    console.error(`[${new Date().toLocaleString()}] 清空失败队列出错:`, err);
    ctx.status = 500;
    ctx.body = { success: false, message: err.message };
  }
});

module.exports = router;